iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 23
0
自我挑戰組

Verilog 從放棄到有趣系列 第 23

[Day23] generate

  • 分享至 

  • xImage
  •  

今天來補一下昨天提到的文法,generate,因為這是第一次出現,所以怕大家不熟悉,特別來提一下,之前說過在寫for迴圈時要寫在always block裡面,然後訊號線因為寫在always block裡面,所以要宣告reg,但其實也可以用wire形式,就用gererate來包起來,下面舉一個用gererate做for迴圈加法:

genvar idx;
generate
  for (idx = 0; idx < 8; idx = idx + 1)
  begin: 
    assign a[idx] = b[idx] + c[idx];
  end
endgenerate

以上面的例子,for裡面的index宣告時要記得用genvar宣告,包起來就可以用assign給值了.

像昨天的例子中,module也可以一次宣告很多個,像陣列的形式宣告,module的input,output的訊號線也是宣告成陣列比較好控制,再把昨天的code貼過來看一下:

generate
  for(i=0;i<4;i=i+1)begin
    BCD 
    B(
      .clk(clk),
      .rst(rst),
	  .Cin(Ci[i]),
	  .sum(sum[i]),
	  .Cout(Co[i])  
    );
  end
endgenerate


類似陣列的方式宣告module非常的方便,就像昨天的BCD計數器,或著需要多個module做相同的事情,像是矩陣乘法等等,都可以像這樣宣告,管理上也很方便,因為變數跟module都宣告成陣列形式,所以用for去管理非常的簡節,這邊就分享給大家.


上一篇
[Day22]BCD計數器
下一篇
[Day24]用verilog實作矩陣相乘
系列文
Verilog 從放棄到有趣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言